package com.dreamder.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import com.dreamder.model.enums.SexoEnum;

@Entity
@Table(name = "T_DRD_USUARIO")
@SequenceGenerator(name = "usuarioSeq", sequenceName = "SEQ_DRD_USUARIO", allocationSize = 1)
public class Usuario implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3068422527653526919L;

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "usuarioSeq")
	@Column(name = "id_usuario")
	private Long id;

	@Column(name = "nome", nullable = false, length = 50)
	private String nome;

	@Column(name = "email", nullable = false, length = 30, unique = true)
	private String email;

	@Column(name = "login", nullable = false, length = 15, unique = true)
	private String login;

	@Column(name = "senha", nullable = false, length = 15)
	private String senha;

	@Temporal(TemporalType.DATE)
	@Column(name = "dt_nascimento")
	private Date dataNascimento;

	@Column(name = "sexo", nullable = true)
	@Enumerated(EnumType.ORDINAL)
	private SexoEnum sexo;

	@Column(name = "foto_perfil", length = 255)
	private String fotoPerfil;

	/*
	@OneToMany(mappedBy = "dono", fetch = FetchType.LAZY)
	private Collection<Sonho> sonhos;

	@ManyToMany(mappedBy = "usuariosParticipantes", fetch = FetchType.LAZY)
	private Collection<Sonho> sonhosQueParticipa;

	@OneToMany(mappedBy = "relator", fetch = FetchType.LAZY)
	private Collection<Denuncia> denunciasRelatadas;

	@OneToMany(mappedBy = "remetente", fetch = FetchType.LAZY)
	private Collection<Mensagem> mensagens;*/

	public Usuario() {
	}

	public Usuario(String nome, String login, String email, String senha,
			Date dataNascimento, SexoEnum sexo) {
		this.nome = nome;
		this.login = login;
		this.email = email;
		this.senha = senha;
		this.dataNascimento = dataNascimento;
		this.sexo = sexo;
	}

	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}

	/**
	 * @param id
	 *            the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/**
	 * @return the nome
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * @param nome
	 *            the nome to set
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * @param email
	 *            the email to set
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * @return the login
	 */
	public String getLogin() {
		return login;
	}

	/**
	 * @param login
	 *            the login to set
	 */
	public void setLogin(String login) {
		this.login = login;
	}

	/**
	 * @return the senha
	 */
	public String getSenha() {
		return senha;
	}

	/**
	 * @param senha
	 *            the senha to set
	 */
	public void setSenha(String senha) {
		this.senha = senha;
	}

	/**
	 * @return the dataNascimento
	 */
	public Date getDataNascimento() {
		return dataNascimento;
	}

	/**
	 * @param dataNascimento
	 *            the dataNascimento to set
	 */
	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	/**
	 * @return the sexo
	 */
	public SexoEnum getSexo() {
		return sexo;
	}

	/**
	 * @param sexo
	 *            the sexo to set
	 */
	public void setSexo(SexoEnum sexo) {
		this.sexo = sexo;
	}

	/**
	 * @return the fotoPerfil
	 */
	public String getFotoPerfil() {
		return fotoPerfil;
	}

	/**
	 * @param fotoPerfil
	 *            the fotoPerfil to set
	 */
	public void setFotoPerfil(String fotoPerfil) {
		this.fotoPerfil = fotoPerfil;
	}

}
